<?php
/**
 * php.lang 패키지 함수 모음 
 * static 메소드에 대한 축약형
 * 
 * @package php.function
 */

/**
 * 전역 변수 얻기 
 *
 * @return array 
 */
function global_($type) { 
	return Request::getGlobals($type);
}

/**
 * $_GET 변수 값 받기 
 * 필드에 값이 없다면 기본값으로 $_GET 변수에 등록이 되어진다. 
 *
 * @param string $field	get 변수 명 
 * @param mixed $value	$field에 값이 없다면 기본값 ''을 지정한다.
 * 
 */
function get_($field, $value = '', $is_set = false) {
	return Request::get($field, $value, $is_set);
}

/**
 * $_POST 변수 값 받기 
 * 필드에 값이 없다면 기본값으로 $_POST 변수에 등록이 되어진다. 
 *
 * @param string $field	post 변수 명 
 * @param mixed $value	$field에 값이 없다면 기본값 ''을 지정한다.
 * 
 */
function post_($field, $value = '', $is_set = false) {
	return Request::post($field, $value, $is_set);
}

/**
 * $_REQUEST 변수 값 받기 
 * 필드에 값이 없다면 기본값으로 $_REQUEST 변수에 등록이 되어진다. 
 *
 * @param string $field	get 변수 명 
 * @param mixed $value	$field에 값이 없다면 기본값 ''을 지정한다.
 * 
 */
function request_($field, $value = '', $is_set = false) {
	return Request::vars($field, $value, $is_set);
}

/**
 * $_SESSION 변수 값 받기 
 * 필드에 값이 없다면 기본값으로 $_SESSION 변수에 등록이 되어진다. 
 *
 * @param string $field	$_SESSION 키이름 
 * @param mixed $value	$field에 값이 없다면 기본값 ''을 지정한다.
 * 
 */
function session_($field, $value = '') {
	if (empty($_SESSION[$field])) {
		$_SESSION[$field] = $value;
	}
	return $_SESSION[$field];
}

/**
 * $_COOKIE 변수 값 받기 
 * 필드에 값이 없다면 기본값으로 $_COOKIE 변수에 등록이 되어진다. 
 *

 * @param string $field	$_COOKIE 변수 명 
 * @param mixed $value	$field에 값이 없다면 기본값 ''을 지정한다.
 * 
 */
function cookie_($field, $value = '') {
	if (empty($_COOKIE[$field])) {
		$_COOKIE[$field] = $value;
	}
	return $_COOKIE[$field];
}

/**
 * $_SERVER 변수 값 받기 
 *

 * @param string $field	서버 변수명, 대소문자 구별 안함 
 * 
 */
function env_($field) {
	$field = strtoupper($field);

	return $_SERVER[$field];
}

/**
 * 배열 <input type="hidden" > 문자열로 반환
 *

 * @param array $arr		배열
 * @param string $prefix	key 값 앞에 붙을 이름
 * @return string 
 *
 */
function hidden_($arr, $prefix = '') {
	if (gettype($arr) != "array") {
		return "배열이 아닙니다.";
	}

	$str = "";
	foreach ($arr as $key => $value) {
		$str .= "<input type='hidden' name='".$prefix.$key."' value='".$value."' />\n";
	}

	return $str;
}

/**
 * GET, POST 값에 대해서 hidden 객체 출력
 *

 * @param string $type		get, post, request, session, server 등등 
 * @param string $prefix	key 값 앞에 붙을 이름
 * @return void
 */
function hidden_print($type) {
	echo hidden_(GV_($type));
}

/**
 * GET, POST 값에 대해서 table 출력
 *

 * @param string $type		get, post, request, session, server 등등 
 * @return void
 */
function view_($type) {

	$arr = GV_($type);

	if (gettype($arr) != "array") {
		return "배열이 아닙니다.";
	}
	
	echo "<table border='1'>";
	echo  "<tr><th>Key</th><th>Value</th></tr>";
	
	foreach ($arr as $key => $value) {

			if (is_array($value)) { 
				echo  "<tr><td>";
				echo $key;
				echo "</td><td>";
				view_($value);
				echo "</td></tr>";					
			} else { 

				$value = htmlspecialchars($value);
				$value = nl2br($value);
				echo  "<tr><td>";
				echo $key;
				echo "</td><td>";
				echo $value;
				echo "</td></tr>";	
			}
	}

	echo "</table>";
}


/**
 * Data 객체 생성 함수 
 * 
 * <code>echo data_(null, array(....), array(....));</code>
 * 
 * @param $connector IConnector 연결자
 * @param $fields array 필드리스트
 * @param $rows array 데이타배열
 * @return Data 생성된 Data 객체
 */
function data_($connector = null, $fields = array(), $rows = array()) { 
	return new Data($connector, $fields, $rows);
}

/*
 * 세션 종료 
 *
 * 
 */
function session_close()
{
	session_unset();
	session_destroy();
}

/**
 * 기본값 설정 
 *

 * @param mixed $value	변수
 * @param mixed $default	기본값 ''
 * @return mixed	$value나 $default의 값 
 *
 */
function default_($value, $default = '') {

	if (empty($value)) {
		$value = $default;
	}

	return $value;
}

function d_(&$value, $default = '') { 
	if (empty($value)) {
		$value = $default;
	}

	return $value;
}

/**
 * 기본값 설정 
 * 
 * <code>echo IF_($a, '1', '2');   // $a가 1이면 $a , 아니면 2 </code>
 *

 * @param mixed $value1	변수
 * @param mixed $value2	변수
 * @param mixed $default	기본값 ''
 * @return mixed	$value1과 $value2 가 같으면 $value1, 다르면 $default 반환
 *
 */
function if_($value1, $value2, $default = '') { 
	return ($value1 == $value2) ? $value1 : $default;
}

/**
 * 기본값 설정 
 * 
 * <code>echo IF2_($a, '1', '2', '3');   // $a가 1이면 2 , 아니면 3 </code>
 *

 * @param mixed $value1	변수
 * @param mixed $value2	변수
 * @param mixed $return1	$value1과 $value2 가 같을 때 반환 값 
 * @param mixed $return2	$value1과 $value2 가 다를 때 반환 값 
 * @return mixed	
 *
 */
function if2_($value1, $value2, $return1 = '', $return2 = '') { 
	return ($value1 == $value2) ? $return1 : $return2;
}

/**
 * pre 태그를 포함한 print_r() 함수 버전 
 *
 * @param mixed $arr  php에서 사용할 수 있는 모든 자료형
 */
function pre_($arr) {
	echo "<pre>".print_r($arr, true)."</pre>";
}


/**
 * in_array 의 일반 매개변수 버전 
 *
 * <code>
 * if (in_list('아빠', "엄마", "아빠", '아들', '딸')) echo "아빠 있음";
 * </code>
 * 
 * 가장 첫번째 값이 나머지 값들중에 있는지 비교한다. 
 *
 * @param mixed|... $arr  php에서 사용할 수 있는 모든 자료형
 * @return bool	배열안에 속해 있으면 true, 아니면 false 
 * @see in_array()
 */
function in_list() { 
	$arr = func_get_args();

	$search = array_shift($arr);

	return in_array($search, $arr);
}

/**
 * Tag를 만들기 위한 Function
 *
 * <code>
 * $div = tag_('div', true)->add('안녕');   // <div>안녕</div>
 * </code>
 *
 * @param	string $tag		Tag 이름 
 * @param	boolean $hasClose	true : Two 태그, false : One 태그, 기본값 : false 
 * @return  Tag 
 *
 */
function tag_($tag, $hasClose = false) {
	return new Tag($tag, $hasClose);
}

/**
 * 
 * @param $tag
 * @param $hasClose
 * @return Tag
 */
function x_($tag, $hasClose = true) { 
	return new Tag($tag, $hasClose);
}

/**
 * html 태그를 생성해주기 위한 함수 
 *
 * <code>
 * $html = html_('a', array('href' => '#'), array('color' => 'red'))->add('안녕');   // <a href='#' style='color:red'>안녕</a>
 * </code>
 *
 * @param string $tag html태그 이름 
 * @param array $attribute 속성 리스트 
 * @param array $style 스타일 리스트 
 * @return Tag
 */
function html_($tag, $attribute = array(), $style = array()) { 
	$tag = strtolower($tag);

	$obj = new Tag($tag, $GLOBALS['TAG_TABLE'][$tag]);
	$obj->setAttribute($attribute);
	$obj->setStyle($style);

	return $obj;
}

/** 
 * string 클래스를 위한 utility 클래스 
 *
 * @param $string string 생성될문자열
 * @return String 
 */
function string_($string = '') { 
	return new String($string);
}

/**
 * ArrayUtil help 함수
 *
 * @param array $arr	배열
 * @return ArrayUtil
 */
function a_($arr = array()) { 
	return new ArrayUtil($arr);
}

/**
 * html 태그 테이블 
 * 
 * @var TAG_TABLE 
 *
 */
$GLOBALS['TAG_TABLE'] = array(
	'a' => true, 
	'acronym' => true, 
	'address' => true, 
	'applet' => true, 
	'area' => true,
	'b' => true,
	'base' => false,
	'basefont' => false,
	'big' => true,
	'blockquote' => true,
	'body' => true,
	'br' => false,
	'button' => true,
	'caption' => true,
	'center' => true,
	'cite' => true,
	'code' => true,
	'col' => false,
	'colgroup' => true,
	'comment' => true,
	'dd' => true,
	'del' => true,
	'dfn' => true,
	'dir' => true,
	'div' => true,
	'dl' => true,
	'dt' => true,
	'em' => true,
	'embed' => true,
	'fieldset' => true,
	'font' => true,
	'form' => true,
	'frame' => false,
	'frameset' => true,
	'head' => true,
	'h1' => true,
	'h2' => true,
	'h3' => true,
	'h4' => true,
	'h5' => true,
	'h6' => true,
	'hr' => true,
	'html' => true,
	'comment' => true,
	'i' => true,
	'iframe' => true,
	'img' => false,
	'input' => false,
	'ins' => true,
	'isindex' => true,
	'kbd' => true,
	'label' => true,
	'legend' => true,
	'li' => true,
	'link' => true,
	'listing' => true,
	'map' => true,
	'marquee' => true,
	'menu' => true,
	'meta' => false,
	'nobr' => true,
	'noframes' => true,
	'noscript' => true,
	'object' => true,
	'ol' => true,
	'option' => true,
	'p' => true,
	'param' => true,
	'plaintext' => true,
	'pre' => true,
	'q' => true,
	'rt' => true,
	'ruby' => true,
	's' => true,
	'samp' => true,
	'script' => true,
	'select' => true,
	'small' => true,
	'span' => true,
	'strike' => true,
	'strong' => true,
	'style' => true,
	'sub' => true,
	'sup' => true,
	'table' => true,
	'tbody' => true,
	'td' => true,
	'textarea' => true,
	'tfoot' => true,
	'th' => true,
	'thead' => true,
	'title' => true,
	'tr' => true,
	'tt' => true,
	'u' => true,
	'ul' => true,
	'var' => true,
	'wbr' => true,
	'xml' => true,
	'xmp' => true,
);
?>